package xfuzzy.xfhl.model.spec;

import xfuzzy.lang.FuzzyOperator;
import xfuzzy.lang.Operatorset;

/**
 * Clase que crea un Conjunto de operadores (OperatorSet). Contiene las
 * variables globales que definen las funciones para el operador AND y el
 * operador de defuzificaci�n.
 * 
 * @author Sergio Cala Cordero, Septiembre 2009, Herramienta XFHL
 */
public class XfhlOperSet {

	/**
	 * Funcion Minimo para el operador AND
	 */
	public static final int AndOperatorMin = 0;

	/**
	 * Funcion Producto para el operador AND
	 */
	public static final int AndOperatorProd = 1;

	/**
	 * Metodo de defuzificacion: FuzzyMean
	 */
	public static final int DefuzOperatorFuzzyMean = 0;

	/**
	 * Metodo de defuzificacion: WeightedFuzzyMean
	 */
	public static final int DefuzOperatorWeightedFuzzyMean = 1;

	/**
	 * 
	 * @param name
	 *            Nombre del conjunto de operadores.
	 * @param AndOperator
	 *            Funci�n que utilizaremos para el operador AND.
	 * @param DefuzOperator
	 *            Funci�n que utilizaremos para el operador de defuzificaci�n.
	 * @return el conjunto de operadores (OperatorSet)
	 */
	public static Operatorset create(String name, int AndOperator, int DefuzOperator) {
		/* Creamos el conjunto de operadores */
		Operatorset opSet = new Operatorset(name);

		// OPERADOR AND
		if (AndOperator == XfhlOperSet.AndOperatorMin) {
			// Min para el and
			opSet.set(new xfuzzy.pkg.xfl.binary.min(), FuzzyOperator.AND);
		} else if (AndOperator == XfhlOperSet.AndOperatorProd) {
			// Producto para el and
			opSet.set(new xfuzzy.pkg.xfl.binary.prod(), FuzzyOperator.AND);
		}

		if (DefuzOperator == XfhlOperSet.DefuzOperatorFuzzyMean) {
			opSet.set(new xfuzzy.pkg.xfl.defuz.FuzzyMean(), FuzzyOperator.DEFUZMETHOD);
		} else if (DefuzOperator == XfhlOperSet.DefuzOperatorWeightedFuzzyMean) {
			opSet.set(new xfuzzy.pkg.xfl.defuz.WeightedFuzzyMean(), FuzzyOperator.DEFUZMETHOD);
		}
		return opSet;
	}

}
